import { defineStore } from 'pinia';
import tool from '@/utils/tool';

const defaultTag = [
    { name: 'dashboard', title: '仪表盘', path: '/dashboard', affix: true }
];
const useTagStore = defineStore('tag', {
    state: () => ({
        tags:
            !tool.local.get('tags') || tool.local.get('tags').length === 0
                ? defaultTag
                : tool.local.get('tags')
    }),

    getters: {
        getState() {
            return { ...this.$state };
        }
    },

    actions: {
        addTag(tag) {
            const target = this.tags.find((item) => item.path === tag.path);
            if (!target && tag.path) {
                this.tags.push(tag);
            }
            this.updateTagsToLocal();
        },

        removeTag(tag) {
            let index = 0;
            this.tags.map((item, idx) => {
                if (item.path === tag.path && !item.affix) {
                    if (this.tags[idx + 1]) {
                        index = idx;
                    } else if (idx > 0) {
                        index = idx - 1;
                    }
                    this.tags.splice(idx, 1);
                }
            });
            this.updateTagsToLocal();
            return this.tags[index];
        },

        updateTag(tag) {
            this.tags.map((item) => {
                if (item.path == tag.path) {
                    item = Object.assign(item, tag);
                }
            });
            this.updateTagsToLocal();
        },

        updateTagTitle(path, title) {
            this.tags.map((item) => {
                if (item.path == path) {
                    item.customTitle = title;
                }
            });
            this.updateTagsToLocal();
        },

        updateTagsToLocal() {
            tool.local.set('tags', this.tags);
        },

        clearTags() {
            this.tags = defaultTag;
            tool.local.set('tags', defaultTag);
        }
    }
});

export default useTagStore;
